各种变量的存储位置
- stack:局部变量
- heap: 动态分配内存的变量(malloc/new)
- bss section: 全局化的未初始化的变量
- data section: 全局化的已初始化的变量
- rodata: (只读data段)全局化的静态变量(const)
例如:
1 | int a = 0; //.data |
linux下将shellcode运行
1.手写简易shellcode
1 | jmp sh |
2.一系列步骤
1 | Assembly: nasm a.asm -o a.o -felf32 |
3.带入调用shellcode的程序test.c
#include "code.h"
typedef int(*CODE)();
int main()
{
((CODE)shellcode)();
}
Run Shellcode: gcc test.c -o test -m32 -zexexstack
编译tips
64位机上编译上面程序需要强制32位编译,用gcc -m32 、as –32选项
AT&T:
as easy.s -o easy.o –32
ld easy.o -o easy -m elf_i386
INTEL:
nasm srop.asm -f elf64
ld -m elf_x86_64 srop.o -o srop
在尝试编译c++时,发现5.4 的gcc只加pie或者fpie都无法启动pie,只有当两个都加上时才能开启程序的pie,比较神奇hhh